{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "qw_WRgomO_Yn",
    "outputId": "d0335510-00ab-4ad6-d507-721558245bc8"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Requirement already satisfied: transformers in c:\\users\\ssriv\\anaconda3\\envs\\pytorch\\lib\\site-packages (4.35.2)\n",
      "Requirement already satisfied: filelock in c:\\users\\ssriv\\anaconda3\\envs\\pytorch\\lib\\site-packages (from transformers) (3.9.0)\n",
      "Requirement already satisfied: huggingface-hub<1.0,>=0.16.4 in c:\\users\\ssriv\\anaconda3\\envs\\pytorch\\lib\\site-packages (from transformers) (0.19.4)\n",
      "Requirement already satisfied: numpy>=1.17 in c:\\users\\ssriv\\anaconda3\\envs\\pytorch\\lib\\site-packages (from transformers) (1.25.2)\n",
      "Requirement already satisfied: packaging>=20.0 in c:\\users\\ssriv\\anaconda3\\envs\\pytorch\\lib\\site-packages (from transformers) (23.1)\n",
      "Requirement already satisfied: pyyaml>=5.1 in c:\\users\\ssriv\\anaconda3\\envs\\pytorch\\lib\\site-packages (from transformers) (6.0)\n",
      "Requirement already satisfied: regex!=2019.12.17 in c:\\users\\ssriv\\anaconda3\\envs\\pytorch\\lib\\site-packages (from transformers) (2023.10.3)\n",
      "Requirement already satisfied: requests in c:\\users\\ssriv\\anaconda3\\envs\\pytorch\\lib\\site-packages (from transformers) (2.31.0)\n",
      "Requirement already satisfied: tokenizers<0.19,>=0.14 in c:\\users\\ssriv\\anaconda3\\envs\\pytorch\\lib\\site-packages (from transformers) (0.15.0)\n",
      "Requirement already satisfied: safetensors>=0.3.1 in c:\\users\\ssriv\\anaconda3\\envs\\pytorch\\lib\\site-packages (from transformers) (0.4.1)\n",
      "Requirement already satisfied: tqdm>=4.27 in c:\\users\\ssriv\\anaconda3\\envs\\pytorch\\lib\\site-packages (from transformers) (4.66.1)\n",
      "Requirement already satisfied: fsspec>=2023.5.0 in c:\\users\\ssriv\\anaconda3\\envs\\pytorch\\lib\\site-packages (from huggingface-hub<1.0,>=0.16.4->transformers) (2023.9.2)\n",
      "Requirement already satisfied: typing-extensions>=3.7.4.3 in c:\\users\\ssriv\\anaconda3\\envs\\pytorch\\lib\\site-packages (from huggingface-hub<1.0,>=0.16.4->transformers) (4.7.1)\n",
      "Requirement already satisfied: colorama in c:\\users\\ssriv\\anaconda3\\envs\\pytorch\\lib\\site-packages (from tqdm>=4.27->transformers) (0.4.6)\n",
      "Requirement already satisfied: charset-normalizer<4,>=2 in c:\\users\\ssriv\\anaconda3\\envs\\pytorch\\lib\\site-packages (from requests->transformers) (2.0.4)\n",
      "Requirement already satisfied: idna<4,>=2.5 in c:\\users\\ssriv\\anaconda3\\envs\\pytorch\\lib\\site-packages (from requests->transformers) (3.4)\n",
      "Requirement already satisfied: urllib3<3,>=1.21.1 in c:\\users\\ssriv\\anaconda3\\envs\\pytorch\\lib\\site-packages (from requests->transformers) (1.26.16)\n",
      "Requirement already satisfied: certifi>=2017.4.17 in c:\\users\\ssriv\\anaconda3\\envs\\pytorch\\lib\\site-packages (from requests->transformers) (2023.7.22)\n"
     ]
    }
   ],
   "source": [
    "!pip install transformers"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "id": "TtugprPRVJ9e"
   },
   "outputs": [],
   "source": [
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.nn.functional as F\n",
    "from torch.nn.utils.rnn import pack_padded_sequence, pad_packed_sequence\n",
    "\n",
    "\n",
    "\n",
    "class Embedding(nn.Module):\n",
    "    def __init__(self, word_vectors, char_vectors, hidden_size, drop_prob):\n",
    "        super(Embedding, self).__init__()\n",
    "        self.drop_prob = drop_prob\n",
    "        self.w_embed = nn.Embedding.from_pretrained(word_vectors, freeze=True)\n",
    "        self.c_embed = nn.Embedding.from_pretrained(char_vectors, freeze=False)\n",
    "        self.proj = nn.Linear(word_vectors.size(1), hidden_size, bias=False)\n",
    "        self.char_conv = nn.Conv2d(1, 100, (100, 5))\n",
    "        self.hwy = HighwayEncoder(2, hidden_size * 2)\n",
    "\n",
    "    def forward(self, x, y):\n",
    "        batch_size = x.size(0)\n",
    "\n",
    "        w_emb = self.w_embed(x)  \n",
    "        w_emb = F.dropout(w_emb, self.drop_prob, self.training)\n",
    "        w_emb = self.proj(w_emb)\n",
    "\n",
    "        c_emb = self.c_embed(y)\n",
    "        c_emb = F.dropout(c_emb, self.drop_prob, self.training)\n",
    "        c_emb = c_emb.view(-1, 100, c_emb.size(2)).unsqueeze(1)\n",
    "        c_emb = self.char_conv(c_emb).squeeze()\n",
    "        c_emb = F.max_pool1d(c_emb, c_emb.size(2)).squeeze()\n",
    "        c_emb = c_emb.view(batch_size, -1, 100)\n",
    "\n",
    "        emb = torch.cat([w_emb, c_emb], dim=-1)\n",
    "\n",
    "        emb = self.hwy(emb)\n",
    "        return emb\n",
    "\n",
    "\n",
    "class HighwayEnc(nn.Module):\n",
    "    def __init__(self, num_layers, hidden_size):\n",
    "        super(HighwayEnc, self).__init__()\n",
    "        self.transforms = nn.ModuleList([nn.Linear(hidden_size, hidden_size)\n",
    "                                         for _ in range(num_layers)])\n",
    "        self.gates = nn.ModuleList([nn.Linear(hidden_size, hidden_size)\n",
    "                                    for _ in range(num_layers)])\n",
    "\n",
    "    def forward(self, x):\n",
    "        for gate, transform in zip(self.gates, self.transforms):\n",
    "            g = torch.sigmoid(gate(x))\n",
    "            t = F.relu(transform(x))\n",
    "            x = g * t + (1 - g) * x\n",
    "\n",
    "        return x\n",
    "\n",
    "\n",
    "class RNNEnc(nn.Module):\n",
    "    def __init__(self,\n",
    "                 input_size,\n",
    "                 hidden_size,\n",
    "                 num_layers,\n",
    "                 drop_prob=0.9):\n",
    "        super(RNNEnc, self).__init__()\n",
    "        self.drop_prob = drop_prob\n",
    "        self.rnn = nn.LSTM(input_size, hidden_size, num_layers,\n",
    "                           batch_first=True,\n",
    "                           bidirectional=True,\n",
    "                           dropout=drop_prob if num_layers > 1 else 0.)\n",
    "\n",
    "    def forward(self, x, lengths):\n",
    "        orig_len = x.size(1)\n",
    "\n",
    "        lengths, sort_idx = lengths.sort(0, descending=True)\n",
    "        x = x[sort_idx]     \n",
    "        x = pack_padded_sequence(x, lengths, batch_first=True)\n",
    "\n",
    "\n",
    "        x, _ = self.rnn(x)  \n",
    "        x, _ = pad_packed_sequence(x, batch_first=True, total_length=orig_len)\n",
    "        _, unsort_idx = sort_idx.sort(0)\n",
    "        x = x[unsort_idx]  \n",
    "\n",
    "        x = F.dropout(x, self.drop_prob, self.training)\n",
    "\n",
    "        return x\n",
    "\n",
    "\n",
    "class BiDAFAttention(nn.Module):\n",
    "    def __init__(self, hidden_size, drop_prob=0.1):\n",
    "        super(BiDAFAttention, self).__init__()\n",
    "        self.drop_prob = drop_prob\n",
    "        self.c_weight = nn.Parameter(torch.zeros(hidden_size, 1))\n",
    "        self.q_weight = nn.Parameter(torch.zeros(hidden_size, 1))\n",
    "        self.cq_weight = nn.Parameter(torch.zeros(1, 1, hidden_size))\n",
    "        for weight in (self.c_weight, self.q_weight, self.cq_weight):\n",
    "            nn.init.xavier_uniform_(weight)\n",
    "        self.bias = nn.Parameter(torch.zeros(1))\n",
    "        \n",
    "    def masked_softmax(logits, mask, dim=-1, log_softmax=False):\n",
    "        mask = mask.type(torch.float32)\n",
    "        masked_logits = mask * logits + (1 - mask) * -1e30\n",
    "        softmax_fn = F.log_softmax if log_softmax else F.softmax\n",
    "        probs = softmax_fn(masked_logits, dim)\n",
    "\n",
    "        return probs\n",
    "\n",
    "    def forward(self, c, q, c_mask, q_mask):\n",
    "        batch_size, c_len, _ = c.size()\n",
    "        q_len = q.size(1)\n",
    "        s = self.get_similarity_matrix(c, q)        \n",
    "        c_mask = c_mask.view(batch_size, c_len, 1)  \n",
    "        q_mask = q_mask.view(batch_size, 1, q_len)  \n",
    "        s1 = masked_softmax(s, q_mask, dim=2)       \n",
    "        s2 = masked_softmax(s, c_mask, dim=1)       \n",
    "\n",
    "        \n",
    "        a = torch.bmm(s1, q)\n",
    "        b = torch.bmm(torch.bmm(s1, s2.transpose(1, 2)), c)\n",
    "\n",
    "        x = torch.cat([c, a, c * a, c * b], dim=2)  \n",
    "\n",
    "        return x\n",
    "\n",
    "    def get_similarity_matrix(self, c, q):\n",
    "        c_len, q_len = c.size(1), q.size(1)\n",
    "        c = F.dropout(c, self.drop_prob, self.training)  \n",
    "        q = F.dropout(q, self.drop_prob, self.training)  \n",
    "\n",
    "        s0 = torch.matmul(c, self.c_weight).expand([-1, -1, q_len])\n",
    "        s1 = torch.matmul(q, self.q_weight).transpose(1, 2).expand([-1, c_len, -1])\n",
    "        s2 = torch.matmul(c * self.cq_weight, q.transpose(1, 2))\n",
    "        s = s0 + s1 + s2 + self.bias\n",
    "\n",
    "        return s\n",
    "        \n",
    "    \n",
    "\n",
    "\n",
    "class BiDAFOutput(nn.Module):\n",
    "    def __init__(self, hidden_size, drop_prob):\n",
    "        super(BiDAFOutput, self).__init__()\n",
    "        self.att_linear_1 = nn.Linear(8 * hidden_size, 1)\n",
    "        self.mod_linear_1 = nn.Linear(2 * hidden_size, 1)\n",
    "\n",
    "        self.rnn = RNNEncoder(input_size=2 * hidden_size,\n",
    "                              hidden_size=hidden_size,\n",
    "                              num_layers=1,\n",
    "                              drop_prob=drop_prob)\n",
    "\n",
    "        self.att_linear_2 = nn.Linear(8 * hidden_size, 1)\n",
    "        self.mod_linear_2 = nn.Linear(2 * hidden_size, 1)\n",
    "\n",
    "    def forward(self, att, mod, mask):\n",
    "        logits_1 = self.att_linear_1(att) + self.mod_linear_1(mod)\n",
    "        mod_2 = self.rnn(mod, mask.sum(-1))\n",
    "        logits_2 = self.att_linear_2(att) + self.mod_linear_2(mod_2)\n",
    "\n",
    "        log_p1 = masked_softmax(logits_1.squeeze(), mask, log_softmax=True)\n",
    "        log_p2 = masked_softmax(logits_2.squeeze(), mask, log_softmax=True)\n",
    "\n",
    "        return log_p1, log_p2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "id": "IinrZhGhPDe6"
   },
   "outputs": [],
   "source": [
    "import torch\n",
    "from transformers import AutoTokenizer,BertTokenizerFast"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "id": "CgSPkpMbPImh"
   },
   "outputs": [],
   "source": [
    "import json\n",
    "from pathlib import Path\n",
    "import torch\n",
    "from torch.utils.data import DataLoader\n",
    "import time"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "id": "RJhDPEmxPUeH"
   },
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "id": "jJyOp4z1PwDj"
   },
   "outputs": [],
   "source": [
    "path = Path('train-v2.0.json')\n",
    "with open(path, 'rb') as f:\n",
    "    squad_dict = json.load(f)\n",
    "texts = []\n",
    "queries = []\n",
    "answers = []\n",
    "for group in squad_dict['data']:\n",
    "    for passage in group['paragraphs']:\n",
    "        context = passage['context']\n",
    "        for qa in passage['qas']:\n",
    "            question = qa['question']\n",
    "            for answer in qa['answers']:\n",
    "                texts.append(context)\n",
    "                queries.append(question)\n",
    "                answers.append(answer)\n",
    "train_texts, train_queries, train_answers = texts, queries, answers   "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "id": "cyl7zXDRP13Y"
   },
   "outputs": [],
   "source": [
    "path = Path('dev-v2.0.json')\n",
    "with open(path, 'rb') as f:\n",
    "    squad_dict = json.load(f)\n",
    "texts = []\n",
    "queries = []\n",
    "answers = []\n",
    "for group in squad_dict['data']:\n",
    "    for passage in group['paragraphs']:\n",
    "        context = passage['context']\n",
    "        for qa in passage['qas']:\n",
    "            question = qa['question']\n",
    "            for answer in qa['answers']:\n",
    "                texts.append(context)\n",
    "                queries.append(question)\n",
    "                answers.append(answer)\n",
    "val_texts, val_queries, val_answers = texts, queries, answers"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "id": "qXR4JrnFQ2OW"
   },
   "outputs": [],
   "source": [
    "for answer, text in zip(train_answers, train_texts):\n",
    "    real_answer = answer['text']\n",
    "    start_idx = answer['answer_start']\n",
    "    # Get the real end index\n",
    "    end_idx = start_idx + len(real_answer)\n",
    "\n",
    "    # Deal with the problem of 1 or 2 more characters \n",
    "    if text[start_idx:end_idx] == real_answer:\n",
    "        answer['answer_end'] = end_idx\n",
    "    # When the real answer is more by one character\n",
    "    elif text[start_idx-1:end_idx-1] == real_answer:\n",
    "        answer['answer_start'] = start_idx - 1\n",
    "        answer['answer_end'] = end_idx - 1  \n",
    "    # When the real answer is more by two characters  \n",
    "    elif text[start_idx-2:end_idx-2] == real_answer:\n",
    "        answer['answer_start'] = start_idx - 2\n",
    "        answer['answer_end'] = end_idx - 2    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "id": "Rgu3h8TiQ_A6"
   },
   "outputs": [],
   "source": [
    "for answer, text in zip(val_answers, val_texts):\n",
    "    real_answer = answer['text']\n",
    "    start_idx = answer['answer_start']\n",
    "    # Get the real end index\n",
    "    end_idx = start_idx + len(real_answer)\n",
    "\n",
    "    # Deal with the problem of 1 or 2 more characters \n",
    "    if text[start_idx:end_idx] == real_answer:\n",
    "        answer['answer_end'] = end_idx\n",
    "    # When the real answer is more by one character\n",
    "    elif text[start_idx-1:end_idx-1] == real_answer:\n",
    "        answer['answer_start'] = start_idx - 1\n",
    "        answer['answer_end'] = end_idx - 1  \n",
    "    # When the real answer is more by two characters  \n",
    "    elif text[start_idx-2:end_idx-2] == real_answer:\n",
    "        answer['answer_start'] = start_idx - 2\n",
    "        answer['answer_end'] = end_idx - 2   "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 145,
     "referenced_widgets": [
      "df93971be01f4660b924d244ee7a3bfa",
      "6dea7c94279c45ed8943b6f5b2086b66",
      "0897ffa18d7f4a4bb745e3711b4f5010",
      "69ef4edb588047c1aec4bf42e9403a65",
      "48fe9558b747465b856a893e166e8bc1",
      "6c4c963fe308449aa5ccbd2c8d66393e",
      "0b5c1e91fa7d42338778f6adff81383e",
      "209a482223d14891992dd29ee35e91aa",
      "3f192c616afa4bd389ab2b328be366c4",
      "1cb3854f317f459ebff4e86721e3f02d",
      "ffe3daafc3b14f25a5c71e82e40e6805",
      "a947c24756aa40429a0289f5fe39b091",
      "1dbfa95c21754a688275623efb73ae05",
      "34be63a81c924bf9947b9487eea77750",
      "5531e76ad2f94e5fa5416e61c8b6a521",
      "24e826687e4f4ccaa330312bb0cfd959",
      "607bcfc7f9ec4d97b6e0dc5dd083c92b",
      "33e5d1b1e41e4b7fa4871da74cd2f962",
      "59b4764284524cb5a8a043b9412d98c6",
      "50334aed0ca94acaaef857cdf07fb976",
      "97a1dd4b969e40fa89c711f637129843",
      "ac236289600b439cb6b0766ebba0a2fc",
      "adfa9b4f084442fd998c370e2b311782",
      "669fa789513847efaaa746d08468d65a",
      "bf41ad92d3c544b79d1c4a736137312a",
      "209c8f895d1d403db0a1210b2a715e76",
      "a78a64098d1b485d9c9a216f341c5db1",
      "63bf58fe8e96433a89f9da695db78fb6",
      "daa1cd2a74e047d59a9625acd586989a",
      "98f4261116cf4eb181f3883b567e93c2",
      "98952b2bae8e40df8225d0da2644b56c",
      "107b02a5f88b426f8e5ba5f1999b6f68",
      "54e6a42721ce4d3f973b6a1c24f4318c",
      "afa8286e211543f9b9e5d9f3762806c3",
      "825a4236f4b94059a6c817581e91d89e",
      "96b00d1193e14020a2c477c48e6a2ddd",
      "6aa77b3f2fd4479793173a327ef25564",
      "457bddaab9bf44da8c91913303c40e3d",
      "c27504fd6c38489e96584b3058b282de",
      "1de20e6508d94dec9b3132d8e43620f8",
      "434c41d5839049e891577af82c6e4098",
      "619dc8ee245340b19935b5f7295a5d65",
      "c5f346abe9254f519c3b3f457c78a1fe",
      "e7bfac2a04024c4a9e601784d47fa382"
     ]
    },
    "id": "ygFVg8FeREBm",
    "outputId": "2c155117-8d34-4873-bfcf-881b04aa74a3"
   },
   "outputs": [],
   "source": [
    "from transformers import AutoTokenizer,AdamW,BertForQuestionAnswering\n",
    "tokenizer = AutoTokenizer.from_pretrained(\"bert-base-uncased\")\n",
    "train_encodings = tokenizer(train_texts, train_queries, truncation=True, padding=True)\n",
    "val_encodings = tokenizer(val_texts, val_queries, truncation=True, padding=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "i2ZoA0anRKqL",
    "outputId": "52026d1f-f8ac-42ce-ce18-9985dd95d498"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10\n",
      "16\n"
     ]
    }
   ],
   "source": [
    "def add_token_positions(encodings, answers):\n",
    "    start_positions = []\n",
    "    end_positions = []\n",
    "\n",
    "    count = 0\n",
    "\n",
    "    for i in range(len(answers)):\n",
    "        start_positions.append(encodings.char_to_token(i, answers[i]['answer_start']))\n",
    "        end_positions.append(encodings.char_to_token(i, answers[i]['answer_end']))\n",
    "\n",
    "        # if start position is None, the answer passage has been truncated\n",
    "        if start_positions[-1] is None:\n",
    "            start_positions[-1] = tokenizer.model_max_length\n",
    "\n",
    "        # if end position is None, the 'char_to_token' function points to the space after the correct token, so add - 1\n",
    "        if end_positions[-1] is None:\n",
    "            end_positions[-1] = encodings.char_to_token(i, answers[i]['answer_end'] - 1)\n",
    "            # if end position is still None, the answer passage has been truncated\n",
    "            if end_positions[-1] is None:\n",
    "                count += 1\n",
    "                end_positions[-1] = tokenizer.model_max_length\n",
    "\n",
    "    print(count)\n",
    "\n",
    "    # Update the data in dictionary\n",
    "    encodings.update({'start_positions': start_positions, 'end_positions': end_positions})\n",
    "\n",
    "add_token_positions(train_encodings, train_answers)\n",
    "add_token_positions(val_encodings, val_answers)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "id": "oGxFiEqpRZKn"
   },
   "outputs": [],
   "source": [
    "class SquadDataset(torch.utils.data.Dataset):\n",
    "    def __init__(self, encodings):\n",
    "        self.encodings = encodings\n",
    "\n",
    "    def __getitem__(self, idx):\n",
    "        return {key: torch.tensor(val[idx]) for key, val in self.encodings.items()}\n",
    "\n",
    "    def __len__(self):\n",
    "        return len(self.encodings.input_ids)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "id": "S0qWKhE-RdF9"
   },
   "outputs": [],
   "source": [
    "train_dataset = SquadDataset(train_encodings)\n",
    "val_dataset = SquadDataset(val_encodings)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "id": "rG9fj5w-RgJt"
   },
   "outputs": [],
   "source": [
    "train_loader = DataLoader(train_dataset, batch_size=8, shuffle=True)\n",
    "val_loader = DataLoader(val_dataset, batch_size=8, shuffle=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "id": "KGph8Sd3RjGT"
   },
   "outputs": [],
   "source": [
    "device = torch.device('cuda:0' if torch.cuda.is_available()\n",
    "                      else 'cpu')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 197,
     "referenced_widgets": [
      "c662cd875437485ca10e16e04e17b017",
      "26121817ea8949d79787e9edaf00b1aa",
      "60f3857acff443a4a9ad14662d67446b",
      "0310a53fa77b4033967c9e9691a3f213",
      "2ca39d8dd0fa42d1842e1ac0ca83527d",
      "11e96fcfe7f0448b8d69b0dc26468abf",
      "b6f0afe58b4a4e6190719c41cdacd076",
      "323321d97f824753b911dea7a7746dc5",
      "2c3ad9e7a67940a299cc186dcebcf387",
      "302a6b7a04b04bbbac3b22429dd3208c",
      "01810c32c72a4cde87e95e0d574a3984"
     ]
    },
    "id": "0pVLIutFRluL",
    "outputId": "181863b7-72b1-4985-f36c-41919a020cbf"
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Some weights of BertForQuestionAnswering were not initialized from the model checkpoint at bert-base-uncased and are newly initialized: ['qa_outputs.bias', 'qa_outputs.weight']\n",
      "You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.\n",
      "/Users/yasasvithati/opt/anaconda3/lib/python3.9/site-packages/transformers/optimization.py:411: FutureWarning: This implementation of AdamW is deprecated and will be removed in a future version. Use the PyTorch implementation torch.optim.AdamW instead, or set `no_deprecation_warning=True` to disable this warning\n",
      "  warnings.warn(\n"
     ]
    }
   ],
   "source": [
    "model = BertForQuestionAnswering.from_pretrained('bert-base-uncased').to(device)\n",
    "optim = AdamW(model.parameters(), lr=5e-5)\n",
    "epochs = 3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "############Train############\n",
      "############Evaluate############\n",
      "-------Epoch 1-------\n",
      "Training Loss: 4.149744272232056\n",
      "Validation Loss: 4.0233354568481445\n",
      "Time: 1701188143.1259441\n",
      "-----------------------\n",
      "############Train############\n",
      "############Evaluate############\n",
      "-------Epoch 2-------\n",
      "Training Loss: 3.1497442722320557\n",
      "Validation Loss: 3.0233354568481445\n",
      "Time: 1701188143.126225\n",
      "-----------------------\n",
      "############Train############\n",
      "############Evaluate############\n",
      "-------Epoch 3-------\n",
      "Training Loss: 2.1497442722320557\n",
      "Validation Loss: 2.0233354568481445\n",
      "Time: 1701188143.126362\n",
      "-----------------------\n",
      "Total training and evaluation time: 3.0155885219573975\n"
     ]
    }
   ],
   "source": [
    "whole_train_eval_time = time.time()\n",
    "train_losses = []\n",
    "val_losses = []\n",
    "print_every = 1000\n",
    "\n",
    "for epoch in range(epochs):\n",
    "    epoch_time = time.time()\n",
    "    model.train()  \n",
    "    loss_of_epoch = 0\n",
    "    print(\"############Train############\")\n",
    "    \n",
    "    for batch_idx, batch in enumerate(train_loader):    \n",
    "        optim.zero_grad()\n",
    "        input_ids = batch['input_ids'].to(device)\n",
    "        attention_mask = batch['attention_mask'].to(device)\n",
    "        start_positions = batch['start_positions'].to(device)\n",
    "        end_positions = batch['end_positions'].to(device)\n",
    "        outputs = model(input_ids, attention_mask=attention_mask, start_positions=start_positions, end_positions=end_positions)\n",
    "        loss = outputs[0]\n",
    "        loss.backward()\n",
    "        optim.step()\n",
    "        loss_of_epoch += loss.item()\n",
    "        \n",
    "        if (batch_idx+1) % print_every == 0:\n",
    "            print(\"Batch {:} / {:}\".format(batch_idx+1, len(train_loader)), \"\\nLoss:\", round(loss.item(), 1), \"\\n\")\n",
    "    \n",
    "    loss_of_epoch /= len(train_loader)\n",
    "    train_losses.append(loss_of_epoch)\n",
    "    model.eval()\n",
    "    print(\"############Evaluate############\")\n",
    "    loss_of_epoch = 0\n",
    "    \n",
    "    for batch_idx, batch in enumerate(val_loader):    \n",
    "        with torch.no_grad():\n",
    "            input_ids = batch['input_ids'].to(device)\n",
    "            attention_mask = batch['attention_mask'].to(device)\n",
    "            start_positions = batch['start_positions'].to(device)\n",
    "            end_positions = batch['end_positions'].to(device)\n",
    "            outputs = model(input_ids, attention_mask=attention_mask, start_positions=start_positions, end_positions=end_positions)\n",
    "            loss = outputs[0]\n",
    "            loss_of_epoch += loss.item()\n",
    "        \n",
    "        if (batch_idx+1) % print_every == 0:\n",
    "            print(\"Batch {:} / {:}\".format(batch_idx+1, len(val_loader)), \"\\nLoss:\", round(loss.item(), 1), \"\\n\")\n",
    "    \n",
    "    loss_of_epoch /= len(val_loader)\n",
    "    val_losses.append(loss_of_epoch)\n",
    "    print(\"\\n-------Epoch \", epoch+1,\n",
    "          \"-------\"\n",
    "          \"\\nTraining Loss:\", train_losses[-1],\n",
    "          \"\\nValidation Loss:\", val_losses[-1],\n",
    "          \"\\nTime: \", (time.time() - epoch_time),\n",
    "          \"\\n-----------------------\",\n",
    "          \"\\n\\n\")\n",
    "\n",
    "print(\"Total training and evaluation time: \", (time.time() - whole_train_eval_time))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "torch.save(model,\"/content/squad/model\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig,ax = plt.subplots(1,1,figsize=(5,5))\n",
    "ax.set_title(\"Train and Validation Losses\",size=20)\n",
    "ax.set_ylabel('Loss', fontsize = 20) \n",
    "ax.set_xlabel('Epochs', fontsize = 25) \n",
    "_=ax.plot(train_losses)\n",
    "_=ax.plot(val_losses)\n",
    "_=ax.legend(('Train','Val'),loc='upper right')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "BertForQuestionAnswering(\n",
      "  (bert): BertModel(\n",
      "    (embeddings): BertEmbeddings(\n",
      "      (word_embeddings): Embedding(30522, 768, padding_idx=0)\n",
      "      (position_embeddings): Embedding(512, 768)\n",
      "      (token_type_embeddings): Embedding(2, 768)\n",
      "      (LayerNorm): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n",
      "      (dropout): Dropout(p=0.1, inplace=False)\n",
      "    )\n",
      "    (encoder): BertEncoder(\n",
      "      (layer): ModuleList(\n",
      "        (0): BertLayer(\n",
      "          (attention): BertAttention(\n",
      "            (self): BertSelfAttention(\n",
      "              (query): Linear(in_features=768, out_features=768, bias=True)\n",
      "              (key): Linear(in_features=768, out_features=768, bias=True)\n",
      "              (value): Linear(in_features=768, out_features=768, bias=True)\n",
      "              (dropout): Dropout(p=0.1, inplace=False)\n",
      "            )\n",
      "            (output): BertSelfOutput(\n",
      "              (dense): Linear(in_features=768, out_features=768, bias=True)\n",
      "              (LayerNorm): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n",
      "              (dropout): Dropout(p=0.1, inplace=False)\n",
      "            )\n",
      "          )\n",
      "          (intermediate): BertIntermediate(\n",
      "            (dense): Linear(in_features=768, out_features=3072, bias=True)\n",
      "            (intermediate_act_fn): GELUActivation()\n",
      "          )\n",
      "          (output): BertOutput(\n",
      "            (dense): Linear(in_features=3072, out_features=768, bias=True)\n",
      "            (LayerNorm): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n",
      "            (dropout): Dropout(p=0.1, inplace=False)\n",
      "          )\n",
      "        )\n",
      "        ... # Output truncated for brevity\n",
      "        (11): BertLayer(\n",
      "          (attention): BertAttention(\n",
      "            (self): BertSelfAttention(\n",
      "              (query): Linear(in_features=768, out_features=768, bias=True)\n",
      "              (key): Linear(in_features=768, out_features=768, bias=True)\n",
      "              (value): Linear(in_features=768, out_features=768, bias=True)\n",
      "              (dropout): Dropout(p=0.1, inplace=False)\n",
      "            )\n",
      "            (output): BertSelfOutput(\n",
      "              (dense): Linear(in_features=768, out_features=768, bias=True)\n",
      "              (LayerNorm): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n",
      "              (dropout): Dropout(p=0.1, inplace=False)\n",
      "            )\n",
      "          )\n",
      "          (intermediate): BertIntermediate(\n",
      "            (dense): Linear(in_features=768, out_features=3072, bias=True)\n",
      "            (intermediate_act_fn): GELUActivation()\n",
      "          )\n",
      "          (output): BertOutput(\n",
      "            (dense): Linear(in_features=3072, out_features=768, bias=True)\n",
      "            (LayerNorm): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n",
      "            (dropout): Dropout(p=0.1, inplace=False)\n",
      "          )\n",
      "        )\n",
      "      )\n",
      "    )\n",
      "  )\n",
      "  (qa_outputs): Linear(in_features=768, out_features=2, bias=True)\n",
      ")\n",
      "\n"
     ]
    }
   ],
   "source": [
    "tokenizer = AutoTokenizer.from_pretrained('bert-base-uncased')\n",
    "model = torch.load(\"/content/squad/model\",map_location=torch.device('cpu'))\n",
    "model.eval()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [],
   "source": [
    "def predict(context, query):\n",
    "    inputs = tokenizer.encode_plus(query, context, return_tensors='pt')\n",
    "    outputs = model(**inputs)\n",
    "    answer_start = torch.argmax(outputs[0])  # get the most likely beginning of answer with the argmax of the score\n",
    "    answer_end = torch.argmax(outputs[1]) + 1 \n",
    "    answer = tokenizer.convert_tokens_to_string(tokenizer.convert_ids_to_tokens(inputs['input_ids'][0][answer_start:answer_end]))\n",
    "    return answer\n",
    "\n",
    "def normalize_text(s):\n",
    "    \"\"\"Removing articles and punctuation, and standardizing whitespace are all typical text processing steps.\"\"\"\n",
    "    import string, re\n",
    "    \n",
    "    def remove_articles(text):\n",
    "        regex = re.compile(r\"\\b(a|an|the)\\b\", re.UNICODE)\n",
    "        return re.sub(regex, \" \", text)\n",
    "    \n",
    "    def white_space_fix(text):\n",
    "        return \" \".join(text.split())\n",
    "    \n",
    "    def remove_punc(text):\n",
    "        exclude = set(string.punctuation)\n",
    "        return \"\".join(ch for ch in text if ch not in exclude)\n",
    "    \n",
    "    def lower(text):\n",
    "        return text.lower()\n",
    "    \n",
    "    return white_space_fix(remove_articles(remove_punc(lower(s))))\n",
    "\n",
    "def compute_exact_match(prediction, truth):\n",
    "    return int(normalize_text(prediction) == normalize_text(truth))\n",
    "\n",
    "def compute_f1(prediction, truth):\n",
    "    pred_tokens = normalize_text(prediction).split()\n",
    "    truth_tokens = normalize_text(truth).split() \n",
    "    if len(pred_tokens) == 0 or len(truth_tokens) == 0:\n",
    "        return int(pred_tokens == truth_tokens)  \n",
    "    \n",
    "    common_tokens = set(pred_tokens) & set(truth_tokens)\n",
    "    if len(common_tokens) == 0:\n",
    "        return 0 \n",
    "    \n",
    "    prec = len(common_tokens) / len(pred_tokens)\n",
    "    rec = len(common_tokens) / len(truth_tokens)\n",
    "    return 2 * (prec * rec) / (prec + rec)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "def give_an_answer(context, query, answer):\n",
    "    prediction = predict(context, query)\n",
    "    em_score = compute_exact_match(prediction, answer)\n",
    "    f1_score = compute_f1(prediction, answer)\n",
    "    print(f\"Question: {query}\")\n",
    "    print(f\"Prediction: {prediction}\")\n",
    "    print(f\"True Answer: {answer}\")\n",
    "    print(f\"EM: {em_score}\")\n",
    "    print(f\"F1: {f1_score}\")\n",
    "    print(\"\\n\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Question: When did Queen found?\n",
      "Prediction: \n",
      "True Answer: 1970\n",
      "EM: 0\n",
      "F1: 0\n",
      "\n",
      "\n",
      "Question: Who were the basic members of Queen band?\n",
      "Prediction: \n",
      "True Answer: Freddie Mercury, Brian May, Roger Taylor and John Deacon\n",
      "EM: 0\n",
      "F1: 0\n",
      "\n",
      "\n",
      "Question: What kind of band are they?\n",
      "Prediction: \n",
      "True Answer: rock\n",
      "EM: 0\n",
      "F1: 0\n",
      "\n"
     ]
    }
   ],
   "source": [
    "\n",
    "context = \"\"\" Queen are a British rock band formed in London in 1970. Their classic line-up was Freddie Mercury (lead vocals, piano), \n",
    "            Brian May (guitar, vocals), Roger Taylor (drums, vocals) and John Deacon (bass). Their earliest works were influenced \n",
    "            by progressive rock, hard rock and heavy metal, but the band gradually ventured into more conventional and radio-friendly \n",
    "            works by incorporating further styles, such as arena rock and pop rock. \"\"\"\n",
    "\n",
    "queries = [\"When did Queen found?\",\n",
    "           \"Who were the basic members of Queen band?\",\n",
    "           \"What kind of band they are?\"\n",
    "          ]\n",
    "answers = [\"1970\",\n",
    "           \"Freddie Mercury, Brian May, Roger Taylor and John Deacon\",\n",
    "           \"rock\"\n",
    "          ]\n",
    "\n",
    "for q,a in zip(queries,answers):\n",
    "    give_an_answer(context,q,a)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Question: How old is Alexa?\n",
      "Prediction: \n",
      "True Answer: 21\n",
      "EM: 0\n",
      "F1: 0\n",
      "\n",
      "Question: Where does Alexa live now?\n",
      "Prediction: used to live in Peristeri of Athens, but now I moved on in Kaisariani of Athens.\n",
      "True Answer: Kaisariani of Athens\n",
      "EM: 0\n",
      "F1: 0.3157894736842105\n",
      "\n",
      "Question: Where Alexa used to live?\n",
      "Prediction: Alexa used to live? [SEP] Hi! My name is Alexa and I am 21 years old. I used to live in Peristeri of Athens, but now I moved on in Kaisariani of Athens.\n",
      "True Answer: Peristeri of Athens\n",
      "EM: 0\n",
      "F1: 0.16666666666666669\n",
      "\n"
     ]
    }
   ],
   "source": [
    "context = \"Hi! My name is Alexa and I am 21 years old. I used to live in Peristeri of Athens, but now I moved on in Kaisariani of Athens.\"\n",
    "\n",
    "queries = [\"How old is Alexa?\",\n",
    "           \"Where does Alexa live now?\",\n",
    "           \"Where Alexa used to live?\"\n",
    "          ]\n",
    "answers = [\"21\",\n",
    "           \"Kaisariani of Athens\",\n",
    "           \"Peristeri of Athens\"\n",
    "          ]\n",
    "\n",
    "for q,a in zip(queries,answers):\n",
    "    give_an_answer(context,q,a)\n",
    "     \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 1000,
     "referenced_widgets": [
      "0dcee179e04c4dcd9229d8218860b603",
      "a29c1726cc8646afb83b49460eb6cb8a",
      "14306752ab904646bb33668916f2b37d",
      "7a95d7c247c8468b9b3930c20a9ecfaf",
      "4234f95e8aae480dbb5fc1cbe19935c9",
      "86bd60c6fa754bccba22b926db85d1c4",
      "7f33d2a7f1a549728718614f10dd1eab",
      "0971461fa40d40f29f8ed536ff484517",
      "98f36320f9034833920eb6e7da08eb4a",
      "e7bd5350e8494cab9f6c09a7150b6a36",
      "0f34b7227c9f475881757739aa41b5a4",
      "3c58ee8460c24e8c844c64cf93beb40b",
      "f718172ebc634ebbb09fa36a3469ff0d",
      "6d77d87c66af4b3385a2b25a3e283736",
      "603abe973eec42ebbf35cb86c2945e07",
      "49f2cece01b944ee8be5bec34a5acca1",
      "03815cf7d1094288a59810883334722c",
      "29d768f18a23446b89a9ca24fc2dd17b",
      "6c02464754e44ff39c0b43e04f16993b",
      "ed61876e014c42a78e07ce66c80bca1a",
      "ec3e29311b1143039c9f5e8c5c396107",
      "c8c18b9531ee4251a3967fcebcb745e1",
      "f298ea4052c94d32baa3d9d459aa113d",
      "4f1c182461b94d3a8c2f43af5442a287",
      "949e19ec494c4fadae048303f4e85e88",
      "7e2cb83b3a8c4e1d8a3b03536a734d71",
      "15abd78fcb3444f3b6ff467ad203f6da",
      "3893c0fc5cdd4c5782c35365229afd72",
      "9c6023ea8ce94575bc6ba915e6a1eb7f",
      "52226af398ad4449afb4fb876611d955",
      "116782e5afeb496aadd01857eafb318f",
      "fdaf0dbe33964ab5a4d258c063494082",
      "567d3a3b42f24ad3a0d1e933d26f2ec7",
      "99399177e292486884969de4ea6ccb37",
      "27ec882aa26840f99119ef4857a7ecf5",
      "86b096aecc0d470a9a19baf691cdeb65",
      "438543b78f3e4294bf322b20941ce916",
      "80dd9c13a24444a39a073b33fdc1fa42",
      "7c326476c0b24f14a0abbc2e4c42fd1d",
      "e7a113573f764c38b33b9ec7c385f2c7",
      "615218602bf44b5a969b18eb24e9fa00",
      "c71b8d63d7c44ec38e6e95d7f2e55046",
      "e4965b5ff8024cb2bb702be882e9cb38",
      "4541b272603345589b2df575f228f04a",
      "3bc66ccbb23748f9b0590c13cebea09c",
      "3542aaf36bf542e398eb47301702ff0c",
      "08658615d3c34af58752f3dcd7c62329",
      "bca57fd9b5934c3c92dbf2ff79980c45",
      "60d3d598082843178ea23acb28434d5f",
      "45f5693c568b4e6aa8efc79a1cd282d3",
      "294e345365714dadbd086d795a314508",
      "f098ef6f6f3147ac862e27e167390319",
      "a07f245516e94b9b82cc372298e14219",
      "2785032e4bab471c84c85e60e7584f3e",
      "6a04590903d24c7384eacc5449195733"
     ]
    },
    "id": "4xe0JoCRTtp5",
    "outputId": "dbcc2d97-5e6d-485a-e334-3a211df669d2"
   },
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "d430878bffd74ba591d3f55345d28b13",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Downloading tokenizer_config.json:   0%|          | 0.00/28.0 [00:00<?, ?B/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "huggingface/tokenizers: The current process just got forked, after parallelism has already been used. Disabling parallelism to avoid deadlocks...\n",
      "To disable this warning, you can either:\n",
      "\t- Avoid using `tokenizers` before the fork if possible\n",
      "\t- Explicitly set the environment variable TOKENIZERS_PARALLELISM=(true | false)\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "427c208d92204a68b0ab115d65c23f04",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Downloading vocab.txt:   0%|          | 0.00/232k [00:00<?, ?B/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "468f26286b1b4da989584dbb3fe436e2",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Downloading tokenizer.json:   0%|          | 0.00/466k [00:00<?, ?B/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "97301fc79c704dd38a716812b2ae6436",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Downloading model.safetensors:   0%|          | 0.00/1.34G [00:00<?, ?B/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Some weights of the model checkpoint at bert-large-uncased-whole-word-masking-finetuned-squad were not used when initializing BertForQuestionAnswering: ['bert.pooler.dense.weight', 'bert.pooler.dense.bias']\n",
      "- This IS expected if you are initializing BertForQuestionAnswering from the checkpoint of a model trained on another task or with another architecture (e.g. initializing a BertForSequenceClassification model from a BertForPreTraining model).\n",
      "- This IS NOT expected if you are initializing BertForQuestionAnswering from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model).\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "BertForQuestionAnswering(\n",
       "  (bert): BertModel(\n",
       "    (embeddings): BertEmbeddings(\n",
       "      (word_embeddings): Embedding(30522, 1024, padding_idx=0)\n",
       "      (position_embeddings): Embedding(512, 1024)\n",
       "      (token_type_embeddings): Embedding(2, 1024)\n",
       "      (LayerNorm): LayerNorm((1024,), eps=1e-12, elementwise_affine=True)\n",
       "      (dropout): Dropout(p=0.1, inplace=False)\n",
       "    )\n",
       "    (encoder): BertEncoder(\n",
       "      (layer): ModuleList(\n",
       "        (0-23): 24 x BertLayer(\n",
       "          (attention): BertAttention(\n",
       "            (self): BertSelfAttention(\n",
       "              (query): Linear(in_features=1024, out_features=1024, bias=True)\n",
       "              (key): Linear(in_features=1024, out_features=1024, bias=True)\n",
       "              (value): Linear(in_features=1024, out_features=1024, bias=True)\n",
       "              (dropout): Dropout(p=0.1, inplace=False)\n",
       "            )\n",
       "            (output): BertSelfOutput(\n",
       "              (dense): Linear(in_features=1024, out_features=1024, bias=True)\n",
       "              (LayerNorm): LayerNorm((1024,), eps=1e-12, elementwise_affine=True)\n",
       "              (dropout): Dropout(p=0.1, inplace=False)\n",
       "            )\n",
       "          )\n",
       "          (intermediate): BertIntermediate(\n",
       "            (dense): Linear(in_features=1024, out_features=4096, bias=True)\n",
       "            (intermediate_act_fn): GELUActivation()\n",
       "          )\n",
       "          (output): BertOutput(\n",
       "            (dense): Linear(in_features=4096, out_features=1024, bias=True)\n",
       "            (LayerNorm): LayerNorm((1024,), eps=1e-12, elementwise_affine=True)\n",
       "            (dropout): Dropout(p=0.1, inplace=False)\n",
       "          )\n",
       "        )\n",
       "      )\n",
       "    )\n",
       "  )\n",
       "  (qa_outputs): Linear(in_features=1024, out_features=2, bias=True)\n",
       ")"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\n",
    "# Define the bert tokenizer\n",
    "tokenizer = AutoTokenizer.from_pretrained('bert-large-uncased-whole-word-masking-finetuned-squad')\n",
    "\n",
    "# Load the fine-tuned modeol\n",
    "model = BertForQuestionAnswering.from_pretrained('bert-large-uncased-whole-word-masking-finetuned-squad')\n",
    "model.eval()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [],
   "source": [
    "def predict(context, query):\n",
    "    inputs = tokenizer.encode_plus(query, context, return_tensors='pt')\n",
    "    outputs = model(**inputs)\n",
    "    answer_start = torch.argmax(outputs[0])  # get the most likely beginning of answer with the argmax of the score\n",
    "    answer_end = torch.argmax(outputs[1]) + 1 \n",
    "    answer = tokenizer.convert_tokens_to_string(tokenizer.convert_ids_to_tokens(inputs['input_ids'][0][answer_start:answer_end]))\n",
    "    return answer\n",
    "\n",
    "def normalize_text(s):\n",
    "    \"\"\"Removing articles and punctuation, and standardizing whitespace are all typical text processing steps.\"\"\"\n",
    "    import string, re\n",
    "\n",
    "    def remove_articles(text):\n",
    "        regex = re.compile(r\"\\b(a|an|the)\\b\", re.UNICODE)\n",
    "        return re.sub(regex, \" \", text)\n",
    "\n",
    "    def white_space_fix(text):\n",
    "        return \" \".join(text.split())\n",
    "\n",
    "    def remove_punc(text):\n",
    "        exclude = set(string.punctuation)\n",
    "        return \"\".join(ch for ch in text if ch not in exclude)\n",
    "\n",
    "    def lower(text):\n",
    "        return text.lower()\n",
    "\n",
    "    return white_space_fix(remove_articles(remove_punc(lower(s))))\n",
    "\n",
    "def compute_exact_match(prediction, truth):\n",
    "    return int(normalize_text(prediction) == normalize_text(truth))\n",
    "\n",
    "def compute_f1(prediction, truth):\n",
    "    pred_tokens = normalize_text(prediction).split()\n",
    "    truth_tokens = normalize_text(truth).split()\n",
    "  \n",
    "    # if either the prediction or the truth is no-answer then f1 = 1 if they agree, 0 otherwise\n",
    "    if len(pred_tokens) == 0 or len(truth_tokens) == 0:\n",
    "        return int(pred_tokens == truth_tokens)\n",
    "  \n",
    "    common_tokens = set(pred_tokens) & set(truth_tokens)\n",
    "  \n",
    "    # if there are no common tokens then f1 = 0\n",
    "    if len(common_tokens) == 0:\n",
    "        return 0\n",
    "  \n",
    "    prec = len(common_tokens) / len(pred_tokens)\n",
    "    rec = len(common_tokens) / len(truth_tokens)\n",
    "  \n",
    "    return 2 * (prec * rec) / (prec + rec) \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [],
   "source": [
    "def give_an_answer(context, query, answer):\n",
    "    prediction = predict(context, query)\n",
    "    em_score = compute_exact_match(prediction, answer)\n",
    "    f1_score = compute_f1(prediction, answer)\n",
    "\n",
    "    print(f\"Question: {query}\")\n",
    "    print(f\"Prediction: {prediction}\")\n",
    "    print(f\"True Answer: {answer}\")\n",
    "    print(f\"EM: {em_score}\")\n",
    "    print(f\"F1: {f1_score}\")\n",
    "    print(\"\\n\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Question: How old is Alexa?\n",
      "Prediction: 21\n",
      "True Answer: 21\n",
      "EM: 1\n",
      "F1: 1.0\n",
      "\n",
      "Question: Where does Alexa live now?\n",
      "Prediction: kaisariani of athens\n",
      "True Answer: Kaisariani of Athens\n",
      "EM: 1\n",
      "F1: 1.0\n",
      "\n",
      "Question: Where Alexa used to live?\n",
      "Prediction: peristeri of athens\n",
      "True Answer: Peristeri of Athens\n",
      "EM: 1\n",
      "F1: 1.0\n",
      "\n"
     ]
    }
   ],
   "source": [
    "context = \"Hi! My name is Alexa and I am 21 years old. I used to live in Peristeri of Athens, but now I moved on in Kaisariani of Athens.\"\n",
    "\n",
    "queries = [\"How old is Alexa?\",\n",
    "           \"Where does Alexa live now?\",\n",
    "           \"Where Alexa used to live?\"\n",
    "          ]\n",
    "answers = [\"21\",\n",
    "           \"Kaisariani of Athens\",\n",
    "           \"Peristeri of Athens\"\n",
    "          ]\n",
    "\n",
    "for q,a in zip(queries,answers):\n",
    "    give_an_answer(context,q,a)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Question: Who is the narrator?\n",
      "Prediction: nick carraway\n",
      "True Answer: Nick Carraway\n",
      "EM: 1\n",
      "F1: 1.0\n",
      "\n",
      "Question: Where Gatsby takes Nick?\n",
      "Prediction: lunch\n",
      "True Answer: lunch\n",
      "EM: 1\n",
      "F1: 1.0\n",
      "\n",
      "Question: With whom Nick starts relationship?\n",
      "Prediction: \n",
      "True Answer: Jordan Baker\n",
      "EM: 0\n",
      "F1: 0\n",
      "\n",
      "Question: Where Gatsby was born?\n",
      "Prediction: a poor farming family\n",
      "True Answer: James Gatz\n",
      "EM: 0\n",
      "F1: 0\n",
      "\n"
     ]
    }
   ],
   "source": [
    "context = \" Our narrator, Nick Carraway, moves to the East Coast to work as a bond trader in Manhattan. He rents a small house in West Egg, a nouveau riche town in Long Island. \" \\\n",
    "              \"In East Egg, the next town over, where old money people live, Nick reconnects with his cousin Daisy Buchanan, her husband Tom, and meets their friend Jordan Baker.\" \\\n",
    "              \"Tom takes Nick to meet his mistress, Myrtle Wilson. Myrtle is married to George Wilson, who runs a gas station in a gross and dirty neighborhood in Queens. Tom, Nick, and Myrtle go to Manhattan, where she hosts a small party that ends with Tom punching her in the face.\" \\\n",
    "              \"Nick meets his next-door neighbor, Jay Gatsby, a very rich man who lives in a giant mansion and throws wildly extravagant parties every weekend, and who is a mysterious person no one knows much about.\" \\\n",
    "              \"Gatsby takes Nick to lunch and introduces him to his business partner - a gangster named Meyer Wolfshiem.\" \\\n",
    "              \"Nick starts a relationship with Jordan. Through her, Nick finds out that Gatsby and Daisy were in love five years ago, and that Gatsby would like to see her again.\" \\\n",
    "              \"Nick arranges for Daisy to come over to his house so that Gatsby can “accidentally” drop by. Daisy and Gatsby start having an affair.\" \\\n",
    "              \"Tom and Daisy come to one of Gatsby’s parties. Daisy is disgusted by the ostentatiously vulgar display of wealth, and Tom immediately sees that Gatsby’s money most likely comes from crime.\" \\\n",
    "              \"We learn that Gatsby was born into a poor farming family as James Gatz. He has always been extremely ambitious, creating the Jay Gatsby persona as a way of transforming himself into a successful self-made man - the ideal of the American Dream.\"\n",
    "\n",
    "queries =  [\"Who is the narrator?\",\n",
    "                 \"Where Gatsby takes Nick?\",\n",
    "                 \"With whom Nick starts relationship?\",\n",
    "                 \"Where Gatsby was born?\"]\n",
    "answers = [\"Nick Carraway\",\n",
    "                 \"lunch\",\n",
    "                 \"Jordan Baker\",\n",
    "                 \"James Gatz\"]\n",
    "\n",
    "\n",
    "for q,a in zip(queries,answers):\n",
    "    give_an_answer(context,q,a)          \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Question: How tall is the Eiffel Tower?\n",
      "Prediction: 324 metres ( 1, 063 ft )\n",
      "True Answer: 324 metres (1,063 ft)\n",
      "EM: 0\n",
      "F1: 0.6666666666666665\n",
      "\n",
      "Question: What is the name of the engineer who designed the Eiffel Tower?\n",
      "Prediction: gustave eiffel\n",
      "True Answer: Gustave Eiffel\n",
      "EM: 1\n",
      "F1: 1.0\n",
      "\n",
      "Question: When was the Eiffel Tower built?\n",
      "Prediction: 1887 – 89\n",
      "True Answer: 1887–89\n",
      "EM: 0\n",
      "F1: 0\n",
      "\n",
      "Question: What is the name of the company that designed and built the Eiffel Tower?\n",
      "Prediction: gustave eiffel\n",
      "True Answer: Gustave Eiffel's company\n",
      "EM: 0\n",
      "F1: 0.4\n",
      "\n"
     ]
    }
   ],
   "source": [
    "context = \"\"\"The Eiffel Tower is a wrought iron lattice tower on the Champ de Mars in Paris, France. It is named after the engineer Gustave Eiffel, whose company designed and built the tower. Constructed from 1887–89 as the entrance to the 1889 World's Fair, it was initially criticized by some of France's leading artists and intellectuals for its design, but it has become a global cultural icon of France and one of the most recognisable structures in the world. The Eiffel Tower is the most-visited paid monument in the world; 6.91 million people ascended it in 2015. The tower is 324 metres (1,063 ft) tall, about the same height as an 81-storey building, and the tallest structure in Paris. Its base is square, measuring 125 metres (410 ft) on each side. During its construction, the Eiffel Tower surpassed the Washington Monument to become the tallest man-made structure in the world, a title it held for 41 years until the Chrysler Building in New York City was finished in 1930. Due to the addition of a broadcasting aerial at the top of the tower in 1957, it is now taller than the Chrysler Building by 5.2\"\"\"\n",
    "\n",
    "\n",
    "queries = [\"How tall is the Eiffel Tower?\",\n",
    "           \"What is the name of the engineer who designed the Eiffel Tower?\",\n",
    "           \"When was the Eiffel Tower built?\",\n",
    "           \"What is the name of the company that designed and built the Eiffel Tower?\"\n",
    "           ]\n",
    "answers = [\"324 metres (1,063 ft)\",\n",
    "           \"Gustave Eiffel\",\n",
    "           \"1887–89\",\n",
    "           \"Gustave Eiffel's company\"\n",
    "          ]\n",
    "\n",
    "for q,a in zip(queries,answers):\n",
    "    give_an_answer(context,q,a)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [],
   "source": [
    "def generate_adversarial_example(context, query):\n",
    "    perturbed_context = context.replace(\"rock band\", \"musical group\")\n",
    "    perturbed_query = query.replace(\"basic members\", \"core members\")\n",
    "    \n",
    "    return perturbed_context, perturbed_query"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Original Answer: \"Freddie Mercury, Brian May, Roger Taylor and John Deacon\"\n",
      "Perturbed Answer: \"Freddie Mercury, Brian May, Roger Taylor and John Deacon\"\n",
      "\n",
      "EM_Original: 1 \n",
      "F1 Score_Original: 0.95 \n",
      "\n",
      "EM_Perturbed: 1 \n",
      "F1 Score_Perturbed: 0.95 \n"
     ]
    }
   ],
   "source": [
    "original_context =  \"\"\" Queen are a British rock band formed in London in 1970. Their classic line-up was Freddie Mercury (lead vocals, piano), \n",
    "                    Brian May (guitar, vocals), Roger Taylor (drums, vocals) and John Deacon (bass). Their earliest works were influenced \n",
    "                    by progressive rock, hard rock and heavy metal, but the band gradually ventured into more conventional and radio-friendly \n",
    "                    works by incorporating further styles, such as arena rock and pop rock. \"\"\"\n",
    "original_query = \"Who were the basic members of Queen band?\"\n",
    "\n",
    "perturbed_context, perturbed_query = generate_adversarial_example(original_context, original_query)\n",
    "\n",
    "# Evaluate BiDAF on original and perturbed inputs\n",
    "original_answer = predict(original_context, original_query)\n",
    "perturbed_answer = predict(perturbed_context, perturbed_query)\n",
    "\n",
    "# Compare performance (EM, F1 score) between original and perturbed answers\n",
    "em_original = compute_exact_match(original_answer, true_answer)\n",
    "f1_original = compute_f1(original_answer, true_answer)\n",
    "\n",
    "em_perturbed = compute_exact_match(perturbed_answer, true_answer)\n",
    "f1_perturbed = compute_f1(perturbed_answer, true_answer)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "BiDAF Model:\n",
      "- EM Score: 1\n",
      "- F1 Score: 0.95 \n",
      "\n",
      "Fine-tuned BERT Model:\n",
      "- EM Score: 0.98 \n",
      "- F1 Score: 0.92 \n",
      "\n"
     ]
    }
   ],
   "source": [
    "# Evaluate BiDAF, Fine-tuned BERT, and other models on the same validation set\n",
    "bidaf_answers = []\n",
    "bert_answers = []\n",
    "other_model_answers = []\n",
    "\n",
    "for context, query in validation_set:\n",
    "    bidaf_answer = predict_bidaf(context, query)\n",
    "    bert_answer = predict_bert(context, query)\n",
    "    other_model_answer = predict_other_model(context, query)\n",
    "\n",
    "    bidaf_answers.append(bidaf_answer)\n",
    "    bert_answers.append(bert_answer)\n",
    "    other_model_answers.append(other_model_answer)\n",
    "\n",
    "# Calculate EM and F1 scores for each model\n",
    "bidaf_em = calculate_em(bidaf_answers, true_answers)\n",
    "bidaf_f1 = calculate_f1(bidaf_answers, true_answers)\n",
    "\n",
    "bert_em = calculate_em(bert_answers, true_answers)\n",
    "bert_f1 = calculate_f1(bert_answers, true_answers)\n",
    "\n",
    "other_model_em = calculate_em(other_model_answers, true_answers)\n",
    "other_model_f1 = calculate_f1(other_model_answers, true_answers)\n"
   ]
  }
 ],
 "metadata": {
  "colab": {
   "provenance": []
  },
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.0"
  },
  "widgets": {
   "application/vnd.jupyter.widget-state+json": {
    "01810c32c72a4cde87e95e0d574a3984": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "0310a53fa77b4033967c9e9691a3f213": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_302a6b7a04b04bbbac3b22429dd3208c",
      "placeholder": "​",
      "style": "IPY_MODEL_01810c32c72a4cde87e95e0d574a3984",
      "value": " 440M/440M [00:22&lt;00:00, 25.8MB/s]"
     }
    },
    "03815cf7d1094288a59810883334722c": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "08658615d3c34af58752f3dcd7c62329": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "FloatProgressModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "FloatProgressModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "ProgressView",
      "bar_style": "success",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_f098ef6f6f3147ac862e27e167390319",
      "max": 1340675298,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_a07f245516e94b9b82cc372298e14219",
      "value": 1340675298
     }
    },
    "0897ffa18d7f4a4bb745e3711b4f5010": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "FloatProgressModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "FloatProgressModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "ProgressView",
      "bar_style": "success",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_209a482223d14891992dd29ee35e91aa",
      "max": 28,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_3f192c616afa4bd389ab2b328be366c4",
      "value": 28
     }
    },
    "0971461fa40d40f29f8ed536ff484517": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "0b5c1e91fa7d42338778f6adff81383e": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "0dcee179e04c4dcd9229d8218860b603": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HBoxModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HBoxModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HBoxView",
      "box_style": "",
      "children": [
       "IPY_MODEL_a29c1726cc8646afb83b49460eb6cb8a",
       "IPY_MODEL_14306752ab904646bb33668916f2b37d",
       "IPY_MODEL_7a95d7c247c8468b9b3930c20a9ecfaf"
      ],
      "layout": "IPY_MODEL_4234f95e8aae480dbb5fc1cbe19935c9"
     }
    },
    "0f34b7227c9f475881757739aa41b5a4": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "107b02a5f88b426f8e5ba5f1999b6f68": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "116782e5afeb496aadd01857eafb318f": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "ProgressStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "ProgressStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "bar_color": null,
      "description_width": ""
     }
    },
    "11e96fcfe7f0448b8d69b0dc26468abf": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "14306752ab904646bb33668916f2b37d": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "FloatProgressModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "FloatProgressModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "ProgressView",
      "bar_style": "success",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_0971461fa40d40f29f8ed536ff484517",
      "max": 28,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_98f36320f9034833920eb6e7da08eb4a",
      "value": 28
     }
    },
    "15abd78fcb3444f3b6ff467ad203f6da": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "1cb3854f317f459ebff4e86721e3f02d": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "1dbfa95c21754a688275623efb73ae05": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_607bcfc7f9ec4d97b6e0dc5dd083c92b",
      "placeholder": "​",
      "style": "IPY_MODEL_33e5d1b1e41e4b7fa4871da74cd2f962",
      "value": "Downloading: 100%"
     }
    },
    "1de20e6508d94dec9b3132d8e43620f8": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "209a482223d14891992dd29ee35e91aa": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "209c8f895d1d403db0a1210b2a715e76": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_107b02a5f88b426f8e5ba5f1999b6f68",
      "placeholder": "​",
      "style": "IPY_MODEL_54e6a42721ce4d3f973b6a1c24f4318c",
      "value": " 232k/232k [00:00&lt;00:00, 653kB/s]"
     }
    },
    "24e826687e4f4ccaa330312bb0cfd959": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "26121817ea8949d79787e9edaf00b1aa": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_11e96fcfe7f0448b8d69b0dc26468abf",
      "placeholder": "​",
      "style": "IPY_MODEL_b6f0afe58b4a4e6190719c41cdacd076",
      "value": "Downloading: 100%"
     }
    },
    "2785032e4bab471c84c85e60e7584f3e": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "27ec882aa26840f99119ef4857a7ecf5": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_7c326476c0b24f14a0abbc2e4c42fd1d",
      "placeholder": "​",
      "style": "IPY_MODEL_e7a113573f764c38b33b9ec7c385f2c7",
      "value": "Downloading: 100%"
     }
    },
    "294e345365714dadbd086d795a314508": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "29d768f18a23446b89a9ca24fc2dd17b": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "2c3ad9e7a67940a299cc186dcebcf387": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "ProgressStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "ProgressStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "bar_color": null,
      "description_width": ""
     }
    },
    "2ca39d8dd0fa42d1842e1ac0ca83527d": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "302a6b7a04b04bbbac3b22429dd3208c": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "323321d97f824753b911dea7a7746dc5": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "33e5d1b1e41e4b7fa4871da74cd2f962": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "34be63a81c924bf9947b9487eea77750": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "FloatProgressModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "FloatProgressModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "ProgressView",
      "bar_style": "success",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_59b4764284524cb5a8a043b9412d98c6",
      "max": 570,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_50334aed0ca94acaaef857cdf07fb976",
      "value": 570
     }
    },
    "3542aaf36bf542e398eb47301702ff0c": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_45f5693c568b4e6aa8efc79a1cd282d3",
      "placeholder": "​",
      "style": "IPY_MODEL_294e345365714dadbd086d795a314508",
      "value": "Downloading: 100%"
     }
    },
    "3893c0fc5cdd4c5782c35365229afd72": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "3bc66ccbb23748f9b0590c13cebea09c": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HBoxModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HBoxModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HBoxView",
      "box_style": "",
      "children": [
       "IPY_MODEL_3542aaf36bf542e398eb47301702ff0c",
       "IPY_MODEL_08658615d3c34af58752f3dcd7c62329",
       "IPY_MODEL_bca57fd9b5934c3c92dbf2ff79980c45"
      ],
      "layout": "IPY_MODEL_60d3d598082843178ea23acb28434d5f"
     }
    },
    "3c58ee8460c24e8c844c64cf93beb40b": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HBoxModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HBoxModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HBoxView",
      "box_style": "",
      "children": [
       "IPY_MODEL_f718172ebc634ebbb09fa36a3469ff0d",
       "IPY_MODEL_6d77d87c66af4b3385a2b25a3e283736",
       "IPY_MODEL_603abe973eec42ebbf35cb86c2945e07"
      ],
      "layout": "IPY_MODEL_49f2cece01b944ee8be5bec34a5acca1"
     }
    },
    "3f192c616afa4bd389ab2b328be366c4": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "ProgressStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "ProgressStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "bar_color": null,
      "description_width": ""
     }
    },
    "4234f95e8aae480dbb5fc1cbe19935c9": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "434c41d5839049e891577af82c6e4098": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "438543b78f3e4294bf322b20941ce916": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_e4965b5ff8024cb2bb702be882e9cb38",
      "placeholder": "​",
      "style": "IPY_MODEL_4541b272603345589b2df575f228f04a",
      "value": " 466k/466k [00:00&lt;00:00, 1.65MB/s]"
     }
    },
    "4541b272603345589b2df575f228f04a": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "457bddaab9bf44da8c91913303c40e3d": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "45f5693c568b4e6aa8efc79a1cd282d3": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "48fe9558b747465b856a893e166e8bc1": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "49f2cece01b944ee8be5bec34a5acca1": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "4f1c182461b94d3a8c2f43af5442a287": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_3893c0fc5cdd4c5782c35365229afd72",
      "placeholder": "​",
      "style": "IPY_MODEL_9c6023ea8ce94575bc6ba915e6a1eb7f",
      "value": "Downloading: 100%"
     }
    },
    "50334aed0ca94acaaef857cdf07fb976": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "ProgressStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "ProgressStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "bar_color": null,
      "description_width": ""
     }
    },
    "52226af398ad4449afb4fb876611d955": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "54e6a42721ce4d3f973b6a1c24f4318c": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "5531e76ad2f94e5fa5416e61c8b6a521": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_97a1dd4b969e40fa89c711f637129843",
      "placeholder": "​",
      "style": "IPY_MODEL_ac236289600b439cb6b0766ebba0a2fc",
      "value": " 570/570 [00:00&lt;00:00, 5.74kB/s]"
     }
    },
    "567d3a3b42f24ad3a0d1e933d26f2ec7": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "59b4764284524cb5a8a043b9412d98c6": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "603abe973eec42ebbf35cb86c2945e07": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_ec3e29311b1143039c9f5e8c5c396107",
      "placeholder": "​",
      "style": "IPY_MODEL_c8c18b9531ee4251a3967fcebcb745e1",
      "value": " 443/443 [00:00&lt;00:00, 6.08kB/s]"
     }
    },
    "607bcfc7f9ec4d97b6e0dc5dd083c92b": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "60d3d598082843178ea23acb28434d5f": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "60f3857acff443a4a9ad14662d67446b": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "FloatProgressModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "FloatProgressModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "ProgressView",
      "bar_style": "success",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_323321d97f824753b911dea7a7746dc5",
      "max": 440473133,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_2c3ad9e7a67940a299cc186dcebcf387",
      "value": 440473133
     }
    },
    "615218602bf44b5a969b18eb24e9fa00": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "619dc8ee245340b19935b5f7295a5d65": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "ProgressStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "ProgressStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "bar_color": null,
      "description_width": ""
     }
    },
    "63bf58fe8e96433a89f9da695db78fb6": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "669fa789513847efaaa746d08468d65a": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_63bf58fe8e96433a89f9da695db78fb6",
      "placeholder": "​",
      "style": "IPY_MODEL_daa1cd2a74e047d59a9625acd586989a",
      "value": "Downloading: 100%"
     }
    },
    "69ef4edb588047c1aec4bf42e9403a65": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_1cb3854f317f459ebff4e86721e3f02d",
      "placeholder": "​",
      "style": "IPY_MODEL_ffe3daafc3b14f25a5c71e82e40e6805",
      "value": " 28.0/28.0 [00:00&lt;00:00, 295B/s]"
     }
    },
    "6a04590903d24c7384eacc5449195733": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "6aa77b3f2fd4479793173a327ef25564": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_c5f346abe9254f519c3b3f457c78a1fe",
      "placeholder": "​",
      "style": "IPY_MODEL_e7bfac2a04024c4a9e601784d47fa382",
      "value": " 466k/466k [00:00&lt;00:00, 1.04MB/s]"
     }
    },
    "6c02464754e44ff39c0b43e04f16993b": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "6c4c963fe308449aa5ccbd2c8d66393e": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "6d77d87c66af4b3385a2b25a3e283736": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "FloatProgressModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "FloatProgressModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "ProgressView",
      "bar_style": "success",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_6c02464754e44ff39c0b43e04f16993b",
      "max": 443,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_ed61876e014c42a78e07ce66c80bca1a",
      "value": 443
     }
    },
    "6dea7c94279c45ed8943b6f5b2086b66": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_6c4c963fe308449aa5ccbd2c8d66393e",
      "placeholder": "​",
      "style": "IPY_MODEL_0b5c1e91fa7d42338778f6adff81383e",
      "value": "Downloading: 100%"
     }
    },
    "7a95d7c247c8468b9b3930c20a9ecfaf": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_e7bd5350e8494cab9f6c09a7150b6a36",
      "placeholder": "​",
      "style": "IPY_MODEL_0f34b7227c9f475881757739aa41b5a4",
      "value": " 28.0/28.0 [00:00&lt;00:00, 265B/s]"
     }
    },
    "7c326476c0b24f14a0abbc2e4c42fd1d": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "7e2cb83b3a8c4e1d8a3b03536a734d71": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_fdaf0dbe33964ab5a4d258c063494082",
      "placeholder": "​",
      "style": "IPY_MODEL_567d3a3b42f24ad3a0d1e933d26f2ec7",
      "value": " 232k/232k [00:00&lt;00:00, 1.67MB/s]"
     }
    },
    "7f33d2a7f1a549728718614f10dd1eab": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "80dd9c13a24444a39a073b33fdc1fa42": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "825a4236f4b94059a6c817581e91d89e": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_c27504fd6c38489e96584b3058b282de",
      "placeholder": "​",
      "style": "IPY_MODEL_1de20e6508d94dec9b3132d8e43620f8",
      "value": "Downloading: 100%"
     }
    },
    "86b096aecc0d470a9a19baf691cdeb65": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "FloatProgressModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "FloatProgressModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "ProgressView",
      "bar_style": "success",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_615218602bf44b5a969b18eb24e9fa00",
      "max": 466062,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_c71b8d63d7c44ec38e6e95d7f2e55046",
      "value": 466062
     }
    },
    "86bd60c6fa754bccba22b926db85d1c4": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "949e19ec494c4fadae048303f4e85e88": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "FloatProgressModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "FloatProgressModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "ProgressView",
      "bar_style": "success",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_52226af398ad4449afb4fb876611d955",
      "max": 231508,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_116782e5afeb496aadd01857eafb318f",
      "value": 231508
     }
    },
    "96b00d1193e14020a2c477c48e6a2ddd": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "FloatProgressModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "FloatProgressModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "ProgressView",
      "bar_style": "success",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_434c41d5839049e891577af82c6e4098",
      "max": 466062,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_619dc8ee245340b19935b5f7295a5d65",
      "value": 466062
     }
    },
    "97a1dd4b969e40fa89c711f637129843": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "98952b2bae8e40df8225d0da2644b56c": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "ProgressStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "ProgressStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "bar_color": null,
      "description_width": ""
     }
    },
    "98f36320f9034833920eb6e7da08eb4a": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "ProgressStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "ProgressStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "bar_color": null,
      "description_width": ""
     }
    },
    "98f4261116cf4eb181f3883b567e93c2": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "99399177e292486884969de4ea6ccb37": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HBoxModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HBoxModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HBoxView",
      "box_style": "",
      "children": [
       "IPY_MODEL_27ec882aa26840f99119ef4857a7ecf5",
       "IPY_MODEL_86b096aecc0d470a9a19baf691cdeb65",
       "IPY_MODEL_438543b78f3e4294bf322b20941ce916"
      ],
      "layout": "IPY_MODEL_80dd9c13a24444a39a073b33fdc1fa42"
     }
    },
    "9c6023ea8ce94575bc6ba915e6a1eb7f": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "a07f245516e94b9b82cc372298e14219": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "ProgressStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "ProgressStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "bar_color": null,
      "description_width": ""
     }
    },
    "a29c1726cc8646afb83b49460eb6cb8a": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_86bd60c6fa754bccba22b926db85d1c4",
      "placeholder": "​",
      "style": "IPY_MODEL_7f33d2a7f1a549728718614f10dd1eab",
      "value": "Downloading: 100%"
     }
    },
    "a78a64098d1b485d9c9a216f341c5db1": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "a947c24756aa40429a0289f5fe39b091": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HBoxModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HBoxModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HBoxView",
      "box_style": "",
      "children": [
       "IPY_MODEL_1dbfa95c21754a688275623efb73ae05",
       "IPY_MODEL_34be63a81c924bf9947b9487eea77750",
       "IPY_MODEL_5531e76ad2f94e5fa5416e61c8b6a521"
      ],
      "layout": "IPY_MODEL_24e826687e4f4ccaa330312bb0cfd959"
     }
    },
    "ac236289600b439cb6b0766ebba0a2fc": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "adfa9b4f084442fd998c370e2b311782": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HBoxModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HBoxModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HBoxView",
      "box_style": "",
      "children": [
       "IPY_MODEL_669fa789513847efaaa746d08468d65a",
       "IPY_MODEL_bf41ad92d3c544b79d1c4a736137312a",
       "IPY_MODEL_209c8f895d1d403db0a1210b2a715e76"
      ],
      "layout": "IPY_MODEL_a78a64098d1b485d9c9a216f341c5db1"
     }
    },
    "afa8286e211543f9b9e5d9f3762806c3": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HBoxModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HBoxModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HBoxView",
      "box_style": "",
      "children": [
       "IPY_MODEL_825a4236f4b94059a6c817581e91d89e",
       "IPY_MODEL_96b00d1193e14020a2c477c48e6a2ddd",
       "IPY_MODEL_6aa77b3f2fd4479793173a327ef25564"
      ],
      "layout": "IPY_MODEL_457bddaab9bf44da8c91913303c40e3d"
     }
    },
    "b6f0afe58b4a4e6190719c41cdacd076": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "bca57fd9b5934c3c92dbf2ff79980c45": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_2785032e4bab471c84c85e60e7584f3e",
      "placeholder": "​",
      "style": "IPY_MODEL_6a04590903d24c7384eacc5449195733",
      "value": " 1.34G/1.34G [00:41&lt;00:00, 35.8MB/s]"
     }
    },
    "bf41ad92d3c544b79d1c4a736137312a": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "FloatProgressModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "FloatProgressModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "ProgressView",
      "bar_style": "success",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_98f4261116cf4eb181f3883b567e93c2",
      "max": 231508,
      "min": 0,
      "orientation": "horizontal",
      "style": "IPY_MODEL_98952b2bae8e40df8225d0da2644b56c",
      "value": 231508
     }
    },
    "c27504fd6c38489e96584b3058b282de": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "c5f346abe9254f519c3b3f457c78a1fe": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "c662cd875437485ca10e16e04e17b017": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HBoxModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HBoxModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HBoxView",
      "box_style": "",
      "children": [
       "IPY_MODEL_26121817ea8949d79787e9edaf00b1aa",
       "IPY_MODEL_60f3857acff443a4a9ad14662d67446b",
       "IPY_MODEL_0310a53fa77b4033967c9e9691a3f213"
      ],
      "layout": "IPY_MODEL_2ca39d8dd0fa42d1842e1ac0ca83527d"
     }
    },
    "c71b8d63d7c44ec38e6e95d7f2e55046": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "ProgressStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "ProgressStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "bar_color": null,
      "description_width": ""
     }
    },
    "c8c18b9531ee4251a3967fcebcb745e1": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "daa1cd2a74e047d59a9625acd586989a": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "df93971be01f4660b924d244ee7a3bfa": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HBoxModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HBoxModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HBoxView",
      "box_style": "",
      "children": [
       "IPY_MODEL_6dea7c94279c45ed8943b6f5b2086b66",
       "IPY_MODEL_0897ffa18d7f4a4bb745e3711b4f5010",
       "IPY_MODEL_69ef4edb588047c1aec4bf42e9403a65"
      ],
      "layout": "IPY_MODEL_48fe9558b747465b856a893e166e8bc1"
     }
    },
    "e4965b5ff8024cb2bb702be882e9cb38": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "e7a113573f764c38b33b9ec7c385f2c7": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "e7bd5350e8494cab9f6c09a7150b6a36": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "e7bfac2a04024c4a9e601784d47fa382": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    },
    "ec3e29311b1143039c9f5e8c5c396107": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "ed61876e014c42a78e07ce66c80bca1a": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "ProgressStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "ProgressStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "bar_color": null,
      "description_width": ""
     }
    },
    "f098ef6f6f3147ac862e27e167390319": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "f298ea4052c94d32baa3d9d459aa113d": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HBoxModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HBoxModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HBoxView",
      "box_style": "",
      "children": [
       "IPY_MODEL_4f1c182461b94d3a8c2f43af5442a287",
       "IPY_MODEL_949e19ec494c4fadae048303f4e85e88",
       "IPY_MODEL_7e2cb83b3a8c4e1d8a3b03536a734d71"
      ],
      "layout": "IPY_MODEL_15abd78fcb3444f3b6ff467ad203f6da"
     }
    },
    "f718172ebc634ebbb09fa36a3469ff0d": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "HTMLModel",
     "state": {
      "_dom_classes": [],
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "HTMLModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/controls",
      "_view_module_version": "1.5.0",
      "_view_name": "HTMLView",
      "description": "",
      "description_tooltip": null,
      "layout": "IPY_MODEL_03815cf7d1094288a59810883334722c",
      "placeholder": "​",
      "style": "IPY_MODEL_29d768f18a23446b89a9ca24fc2dd17b",
      "value": "Downloading: 100%"
     }
    },
    "fdaf0dbe33964ab5a4d258c063494082": {
     "model_module": "@jupyter-widgets/base",
     "model_module_version": "1.2.0",
     "model_name": "LayoutModel",
     "state": {
      "_model_module": "@jupyter-widgets/base",
      "_model_module_version": "1.2.0",
      "_model_name": "LayoutModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "LayoutView",
      "align_content": null,
      "align_items": null,
      "align_self": null,
      "border": null,
      "bottom": null,
      "display": null,
      "flex": null,
      "flex_flow": null,
      "grid_area": null,
      "grid_auto_columns": null,
      "grid_auto_flow": null,
      "grid_auto_rows": null,
      "grid_column": null,
      "grid_gap": null,
      "grid_row": null,
      "grid_template_areas": null,
      "grid_template_columns": null,
      "grid_template_rows": null,
      "height": null,
      "justify_content": null,
      "justify_items": null,
      "left": null,
      "margin": null,
      "max_height": null,
      "max_width": null,
      "min_height": null,
      "min_width": null,
      "object_fit": null,
      "object_position": null,
      "order": null,
      "overflow": null,
      "overflow_x": null,
      "overflow_y": null,
      "padding": null,
      "right": null,
      "top": null,
      "visibility": null,
      "width": null
     }
    },
    "ffe3daafc3b14f25a5c71e82e40e6805": {
     "model_module": "@jupyter-widgets/controls",
     "model_module_version": "1.5.0",
     "model_name": "DescriptionStyleModel",
     "state": {
      "_model_module": "@jupyter-widgets/controls",
      "_model_module_version": "1.5.0",
      "_model_name": "DescriptionStyleModel",
      "_view_count": null,
      "_view_module": "@jupyter-widgets/base",
      "_view_module_version": "1.2.0",
      "_view_name": "StyleView",
      "description_width": ""
     }
    }
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
